import Vue from "vue";
import config from "./config.js";
let BASE_URL = config.BASE_URL;
// let IMG_BASE_URL = config.IMG_BASE_URL;
import store from '@/store/index.js'
// 确保其它设备登录弹窗只弹一次
let isToast = false
/**
 * 公共方法类
 */
export class Common {
	// 
	static timeAgo(dateString) {
		if (!dateString) {
			return ''
		}
		// 将日期字符串转换为Date对象  
		const date = new Date(dateString);

		// 获取当前时间  
		const now = new Date();

		// 计算两个时间之间的差值（毫秒）  
		const diff = now - date;

		// 转换为天、小时  
		const daysDiff = Math.floor(diff / (1000 * 60 * 60 * 24));
		const hoursDiff = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));

		// 根据差值返回不同的字符串  
		if (daysDiff >= 1) {
			return daysDiff + (daysDiff === 1 ? '天前' : '天前');
		} else if (hoursDiff >= 1) {
			return hoursDiff + (hoursDiff === 1 ? '小时前' : '小时前');
		} else {
			// 可以继续添加分钟、秒等的判断  
			return '刚刚';
		}
	}
	// 获取年龄 天为单位
	static calculateAgeInDays(birthday) {
		const today = new Date();
		const birthDate = new Date(birthday);
		let ageInDays = (today - birthDate) / (1000 * 60 * 60 * 24);
		ageInDays = Math.floor(ageInDays); // 向下取整，因为不足一天的部分不应该计入年龄  
		return ageInDays;
	}

	/**
	 *  //秒转换 时分秒时间格式  30s=>00:00:30
	 */
	static getSecondsNew(s) {
		if (!s) {
			return '0秒'
		}
		var sTime = parseInt(s); // 秒
		var mTime = 0; // 分
		var hTime = 0; // 时
		if (sTime >= 60) { //如果秒数大于60，将秒数转换成整数
			//获取分钟，除以60取整数，得到整数分钟
			mTime = parseInt(sTime / 60);
			//获取秒数，秒数取佘，得到整数秒数
			sTime = parseInt(sTime % 60);
			//如果分钟大于60，将分钟转换成小时
			if (mTime >= 60) {
				//获取小时，获取分钟除以60，得到整数小时
				hTime = parseInt(mTime / 60);
				//获取小时后取佘的分，获取分钟除以60取佘的分
				mTime = parseInt(mTime % 60);
			}
		}
		var result = '';
		if (hTime > 0) {
			result = parseInt(hTime) + '时'
			if (mTime > 0) {
				result += parseInt(mTime) + '分'
			} else {
				result += '0分'
			}
			result += parseInt(sTime) + '秒'
		} else {
			if (mTime > 0) {
				result += parseInt(mTime) + '分' + parseInt(sTime) + '秒'
			} else {
				result += parseInt(sTime) + '秒'
			}
		}
		return result;
	}
	// 跳转地图选择位置
	static chooseLocation(canback) {
		uni.authorize({
			scope: 'scope.userLocation',
			success(res1) {
				console.log(res1)
				uni.chooseLocation({
					success: function(res) {
						console.log(res)
						let addressStr = res.address + res.name
						var reg = /.+?(省|市|自治区|自治州|县|区)/g;
						let ssqArr = res.address.match(reg);
						res['province'] = ssqArr.toString().replaceAll(',', '')
						res['address'] = addressStr
						canback(res)
					},
					fail: function(er) {
						console.log('er：' + JSON.stringify(er));
					}
				})
			}
		})
	}

	/**
	 * 图片预览
	 * paths ：图片数组 不是完整的地址
	 * current ： 当前预览图片下标
	 */
	static previewImage(paths, current) {
		const urls = paths.map(item => {
			return item ? this.getFileUrl(item) : ''
		})
		uni.previewImage({
			urls: urls,
			current: current
		})
	}
	// 设置标题
	static setTitle(title) {
		uni.setNavigationBarTitle({
			title: title
		})
	}
	// 拨打电话
	static phoneCall(phone) {
		if (!phone || phone.indexOf('*') > -1) {
			return
		}
		uni.makePhoneCall({
			phoneNumber: phone
		})
	}

	static getFirstDay() {
		let y = new Date().getFullYear()
		let m = new Date().getMonth() + 1
		m = m < 10 ? "0" + m : m
		let d = "01"
		let ymd = [y, m, d].join("-")
		return ymd + " 00:00:00"
	}
	static getDate() {
		let y = new Date().getFullYear()
		let m = new Date().getMonth() + 1
		m = m < 10 ? "0" + m : m
		let d = new Date().getDate()
		d = d < 10 ? "0" + d : d
		let h = new Date().getHours()
		h = h < 10 ? "0" + h : h
		let min = new Date().getMinutes()
		min = min < 10 ? "0" + min : min
		let s = new Date().getSeconds()
		s = s < 10 ? "0" + s : s
		return `${y}-${m}-${d} ${h}:${min}:${s}`
	}
	static getCurrentTime() {
		let h = new Date().getHours()
		h = h < 10 ? "0" + h : h
		let min = new Date().getMinutes()
		min = min < 10 ? "0" + min : min
		let s = new Date().getSeconds()
		s = s < 10 ? "0" + s : s
		return `${h}:${min}:${s}`
	}
	static getCurrentDate(str = '-') {
		let y = new Date().getFullYear()
		let m = new Date().getMonth() + 1
		m = m < 10 ? "0" + m : m
		return `${y}${str}${m}`
	}
	// 根据 年月获取当前月最后一个和第一个
	static getFirstAndLastDayOfMonth(yearMonth) {
		let year = yearMonth.split("-")[0]
		let month = yearMonth.split("-")[1]
		month = month - 1;

		// 获取该月的第一天  
		var firstDay = new Date(year, month, 1);

		// 获取下一个月的第一天，然后减去一天，得到这个月的最后一天  
		var nextMonthFirstDay = new Date(year, month + 1, 1);
		var lastDay = new Date(nextMonthFirstDay - 1000 * 60 * 60 * 24); // 减去一天的毫秒数  

		return {
			firstDay: uni.$u.timeFormat(firstDay, 'yyyy-mm-dd') + " 00:00:00",
			lastDay: uni.$u.timeFormat(lastDay, 'yyyy-mm-dd') + " 23:59:59"
		};
	}
	// 获取当前日期的 本周开始时间和结束时间
	static getWeekStartAndEnd() {
		const now = new Date();
		const day = now.getDay(); // 获取今天是周几，0代表周日，1代表周一，以此类推  

		// 计算本周的周一的日期  
		let startOfWeek = new Date(now);
		startOfWeek.setDate(now.getDate() - day + 1); // 如果是周日，则加1天变为下周一；其他日子则减去相应的天数变为本周一  

		// 计算本周的周日的日期  
		let endOfWeek = new Date(startOfWeek);
		endOfWeek.setDate(startOfWeek.getDate() + 6); // 从周一开始，加6天得到本周日  

		// 格式化日期为年月日格式  
		function formatDate(date) {
			const year = date.getFullYear();
			const month = (1 + date.getMonth()).toString().padStart(2, '0');
			const day = date.getDate().toString().padStart(2, '0');
			return `${year}-${month}-${day}`;
		}


		const start = formatDate(startOfWeek);
		const end = formatDate(endOfWeek);

		return {
			start,
			end
		};
	}
}

/**
 * 网络请求类
 */
export class Net {
	static upload(path, loading = 1) {

		var headerD = {
			"Content-Type": "multipart/form-data"
		}
		if (uni.getStorageSync('token')) {
			headerD['Authori-zation'] = 'Bearer ' + uni.getStorageSync('token')
		}
		return new Promise((resolve, reject) => {

			if (loading) {
				uni.showLoading({
					mask: true,
					title: '上传中'
				});
			}
			uni.uploadFile({ //上传
				url: BASE_URL + 'upload/image',
				filePath: path,
				name: "file",
				header: headerD,
				formData: {
					'filename': 'file'
				},
				success(res) {
					console.log('返回日志:', res);
					if (loading) {
						uni.hideLoading();
					}
					let data = JSON.parse(res.data)
					resolve(data);
				},
				fail(res) {
					console.log('-res', res);
					if (loading) {
						uni.hideLoading();
					}
					reject(res);
				},
				complete() {
					// uni.hideLoading()
				}
			});
		});
	}

	/**
	 * get 请求  
	 * @param url
	 * @param param
	 * @param loading 是否显示加载中，1显示0不显示
	 * @returns {Promise<any>}
	 * headers里面的Authorization为java项目token传参格式可按需删除
	 */
	static get(url, param, loading = 0, errMsg = 1, loadingTitle = '加载中') {
		if (loading) {
			uni.showLoading({
				mask: true,
				title: loadingTitle
			});
		}
		var headerD = {}
		if (uni.getStorageSync('token')) {
			headerD['Authori-zation'] = 'Bearer ' + uni.getStorageSync('token')
			// headerD['companyId'] = uni.getStorageSync('userInfo').companyId
		}
		return new Promise((resolve, reject) => {
			uni.request({
				url: BASE_URL + url,
				header: headerD,
				data: param,
				success: (res) => {
					console.log('返回日志:', res);
					uni.hideLoading();
					if (res.statusCode == 200) {
						if (res.data.status == '200') {
							resolve(res.data.data);
						} else if (res.data.status == '110002') {
							this.errorDispose(res.data.status)
						} else {
							if (loading) {
								uni.showToast({
									icon: 'none',
									title: res.data.msg || '加载失败，请联系管理员！'
								})
							}
							reject(res.data.msg || '加载失败,请联系管理员');
						}
						// else if (res.data.code == '48003' || res.data.code == '48002') {
						// 	this.errorDispose(res.data.code)
						// } else if (res.data.code == '0001' || res.data.code == '9999') {
						// 	if (errMsg) {
						// 		uni.showToast({
						// 			icon: 'none',
						// 			title: res.data.message || '加载失败，请联系管理员！'
						// 		})
						// 	}
						// 	reject(res.data.message || '加载失败,请联系管理员');
						// }

					} else {
						uni.showToast({
							icon: 'none',
							title: res.data.msg || '加载失败，请联系管理员！'
						})
						reject(res.data.msg || '网络延迟,请稍候再试');
					}
				},
				fail: (res) => {
					uni.hideLoading();
					// 网络超时
					if (res.errMsg && res.errMsg.indexOf('timeout') > -1) {
						uni.showModal({
							title: '提示',
							showCancel: false,
							content: '请求超时，请稍候再试！'
						})
					} else {
						reject(res.errMsg || '网络延迟,请稍候再试');
					}
				},
				complete: (res) => {}
			});
		});
	}
	static delete(url, param, loading = 0, errMsg = 1, loadingTitle = '加载中') {
		if (loading) {
			uni.showLoading({
				mask: true,
				title: loadingTitle
			});
		}
		var headerD = {}
		if (uni.getStorageSync('token')) {
			headerD['Authori-zation'] = 'Bearer ' + uni.getStorageSync('token')
		}
		return new Promise((resolve, reject) => {
			uni.request({
				url: BASE_URL + url,
				header: headerD,
				method: 'DELETE',
				data: param,
				success: (res) => {
					uni.hideLoading();
					console.log('返回日志:', res);
					if (res.statusCode == 200) {
						if (res.data.status == '200') {
							resolve(res.data.data);
						} else if (res.data.status == '110002') {
							this.errorDispose(res.data.status)
						} else {
							if (loading) {
								uni.showToast({
									icon: 'none',
									title: res.data.msg || '加载失败，请联系管理员！'
								})
							}
							reject(res.data.msg || '加载失败,请联系管理员');
						}
						// else if (res.data.code == '48003' || res.data.code == '48002') {
						// 	this.errorDispose(res.data.code)
						// } else if (res.data.code == '0001' || res.data.code == '9999') {
						// 	if (errMsg) {
						// 		uni.showToast({
						// 			icon: 'none',
						// 			title: res.data.message || '加载失败，请联系管理员！'
						// 		})
						// 	}
						// 	reject(res.data.message || '加载失败,请联系管理员');
						// }

					} else {
						uni.showToast({
							icon: 'none',
							title: res.data.msg || '加载失败，请联系管理员！'
						})
						reject(res.data.msg || '网络延迟,请稍候再试');
					}
				},
				fail: (res) => {
					uni.hideLoading();
					// 网络超时
					if (res.errMsg && res.errMsg.indexOf('timeout') > -1) {
						uni.showModal({
							title: '提示',
							showCancel: false,
							content: '请求超时，请稍候再试！'
						})
					} else {
						reject(res.errMsg || '网络延迟,请稍候再试');
					}
				},
				complete: (res) => {}
			});
		});
	}

	/**
	 * post 请求 不验证登录
	 * @param url
	 * @param param
	 * @param loading 是否显示加载中，1显示0不显示
	 * @returns {Promise<any>}
	 * headers里面的Authorization为java项目token传参格式可按需删除
	 */
	static post(url, param, loading = 0, loadingTitle = '请稍候') {
		if (loading) {
			uni.showLoading({
				mask: true,
				title: loadingTitle
			});
		}
		let headerD = {}
		if (uni.getStorageSync('token')) {
			headerD['Authori-zation'] = 'Bearer ' + uni.getStorageSync('token')
		}

		console.log('参数', param)
		return new Promise((resolve, reject) => {
			uni.request({
				url: BASE_URL + url, //仅为示例，并非真实接口地址。
				data: param,
				method: 'POST',
				header: headerD,
				success: (res) => {
					console.log('返回日志:', res);
					if (loading) {
						uni.hideLoading();
					}
					if (res.statusCode == 200) {
						if (res.data.status == '200') {
							resolve(res.data);
						} else if (res.data.status == '110002') {
							this.errorDispose(res.data.status)
						} else {
							uni.showToast({
								icon: 'none',
								title: res.data.msg || '加载失败，请联系管理员！'
							})
							reject(res.data.msg || '加载失败,请联系管理员');
						}
					} else {
						reject(res.data.msg || '网络延迟,请稍候再试');
					}
				},
				fail: (res) => {
					uni.hideLoading();
					// 网络超时
					if (res.errMsg && res.errMsg.indexOf('timeout') > -1) {
						uni.showModal({
							title: '提示',
							showCancel: false,
							content: '请求超时，请稍候再试！'
						})
					} else {
						reject(res.errMsg || '网络延迟,请稍候再试');
					}
				},
				complete() {
					// uni.hideLoading();
				}
			});
		});
	}
	static loginOut() {
		store.commit('SET_TOKEN', '')
		store.commit('SET_USERINFO', '{}')
		uni.clearStorageSync('petInfo')
		uni.setStorageSync('isLoginOut', true)
		uni.navigateTo({
			url: '/pages/mine/login/login'
		})
	}
	static errorDispose(code) {
		console.log('code', code)
		let _this = this
		if (code == '110002') {
			if (isToast) {
				return
			}
			isToast = true
			uni.showModal({
				title: '登录信息失效',
				content: '登录信息已失效,请重新登录',
				confirmText: '知道了',
				showCancel: false,
				success() {
					isToast = false
					_this.loginOut()
				}
			})
		} else if (code == '48003') {
			if (isToast) {
				return
			}
			isToast = true
			uni.showModal({
				title: '登录信息失效',
				content: '登录信息已失效,请重新登录',
				showCancel: false,
				confirmText: '知道了',
				success() {
					isToast = false
					_this.loginOut()
				}
			})
		}
	}
}


/**
 * 路由工具类
 */
export class Jump {
	/**
	 * 路由重定向，关闭当前页面，跳转到应用内的某个页面
	 * @param url
	 * @constructor
	 */
	static Redirect(url) {
		uni.redirectTo({
			url: url
		});
	}
	/**
	 * 直接跳转。保留当前页面
	 * @param url
	 * @constructor
	 */
	static Open(url, isLogin = false) {
		uni.navigateTo({
			url: url
		});
	}

	/**
	 * 关闭当前页面，返回上一页面或多级页面
	 * @param index 返回的页面数，如果 delta 大于现有页面数，则返回到首页
	 */
	static Back(delta = 1, ms = 10) {
		setTimeout(() => {
			uni.navigateBack({
				delta: delta
			});
		}, ms)
	}

	/**
	 * 跳转到 tabBar 页面，并关闭其他所有非 tabBar 页面
	 */
	static switchTab(url) {
		uni.switchTab({
			url: url //通常是首页/pages/index/index
		});
	}

	/**
	 * 关闭所有页面，打开到应用内的某个页面
	 * @param url  需要跳转的应用内页面路径
	 */
	static reLaunch(url) {
		uni.reLaunch({
			url: url
		});
	}
}

/**
 * 弹窗提示
 */

export class Msg {
	static Toast(title = '请求成功', icon = 'none', mask = false) {
		uni.showToast({
			icon: icon,
			title: title,
			mask: mask,
		})
	}
}
